home *** CD-ROM | disk | FTP | other *** search
- #define DISABLE_LOCAL_CALLTRACE 1 // Set to 1 to disable Call Traces for this file.
- #define DISABLE_LOCAL_DEBUG 0 // Set to 1 to disable all debugging for this file.
- #include "DebugUtils.h"
-
- #include <MacMemory.h>
- #include <MacWindows.h>
- #include <OSUtils.h>
- #include <ImageCompression.h>
- #include "ContextUtils.h"
- #include "GWorld.h"
- #include "Nub.h"
- #include "Patches.h"
- #include "PatchHarness.h"
- #include "Port.h"
- #include "FlushPort.h"
-
-
- extern Boolean gOkToBlit;
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- typedef pascal SInt32 (*NQDMiscProcPtr)(SInt32 selector,SInt32 *pb);
-
- #pragma options align=mac68k
- typedef struct QDPortList
- {
- UInt16 count;
- GrafPtr port[0];
- } QDPortList, *QDPortListPtr, **QDPortListHandle;
- #pragma options align=reset
-
- static Boolean ColorGrafPort(GrafPtr port);
- static PortShade *CreatePortShadow(GrafPtr port);
- static void DisposePortShadow(PortShade *shade);
- static PortShade *FindPortShadow(GrafPtr port);
- static GrafPtr FindInQDPortList(PortShade *shade);
- static Ptr GetGrafPortBaseAddr(GrafPtr port);
- static UInt16 GetGrafPortRowBytes(GrafPtr port);
- static QDPortListHandle LMGetPortList(void);
- static Boolean ScreenDeviceBaseAddr(Ptr baseAddr);
- static Boolean ScreenDevicePort(GrafPtr port);
- static void SetGrafPortBaseAddr(GrafPtr port,Ptr baseAddr);
- static void SetGrafPortRowBytes(GrafPtr port,UInt16 rowBytes);
-
- static pascal void StdArcPatch(GrafVerb verb,Rect *rect,short startAngle,short arcAngle);
- static pascal void StdBitsPatch(BitMap *srcMap,Rect *srcRect,Rect *dstRect,short mode,RgnHandle maskRgn);
- static pascal void StdLinePatch(Point endPoint);
- static pascal void StdOvalPatch(GrafVerb verb,Rect *rect);
- static pascal void StdPixPatch(PixMap *src,Rect *srcRect,MatrixRecord *matrix,short mode,RgnHandle mask,PixMap *matte,Rect *matteRect,short flags);
- static pascal void StdPolyPatch(GrafVerb verb,PolyHandle poly);
- static pascal void StdRectPatch(GrafVerb verb,Rect *rect);
- static pascal void StdRgnPatch(GrafVerb verb,RgnHandle rgn);
- static pascal void StdRRectPatch(GrafVerb verb,Rect *rect,short width,short height);
- static pascal void StdTextPatch(short count,Ptr text,Point numer,Point denom);
-
- typedef class StScreenBuffer
- {
- private:
- Ptr fOldBaseAddr;
- UInt16 fOldRowBytes;
- GrafPtr fPort;
-
- public:
- StScreenBuffer(GrafPtr port,CGrafPtr buffer) : fPort(port)
- {
- fOldBaseAddr = GetGrafPortBaseAddr(fPort);
- fOldRowBytes = GetGrafPortRowBytes(fPort);
- SetGrafPortBaseAddr(fPort,GetGrafPortBaseAddr((GrafPtr)buffer));
- SetGrafPortRowBytes(fPort,(GetGrafPortRowBytes((GrafPtr)buffer) & ~0xC001) | (fOldRowBytes & 0xC001));
- }
-
- ~StScreenBuffer(void)
- {
- SetGrafPortBaseAddr(fPort,fOldBaseAddr);
- SetGrafPortRowBytes(fPort,fOldRowBytes);
- }
- } StScreenBuffer;
-
- #ifdef __cplusplus
- }
- #endif
-
-
-
-
-
- extern NubInfo *gInfo;
- extern RoutineDescriptor gCopyBitsPatchRD;
- static RoutineDescriptor gStdArcRD = BUILD_ROUTINE_DESCRIPTOR(uppQDArcProcInfo,StdArcPatch);
- static RoutineDescriptor gStdBitsRD = BUILD_ROUTINE_DESCRIPTOR(uppQDBitsProcInfo,StdBitsPatch);
- static RoutineDescriptor gStdLineRD = BUILD_ROUTINE_DESCRIPTOR(uppQDLineProcInfo,StdLinePatch);
- static RoutineDescriptor gStdOvalRD = BUILD_ROUTINE_DESCRIPTOR(uppQDOvalProcInfo,StdOvalPatch);
- static RoutineDescriptor gStdPixRD = BUILD_ROUTINE_DESCRIPTOR(uppQDPixProcInfo,StdPixPatch);
- static RoutineDescriptor gStdPolyRD = BUILD_ROUTINE_DESCRIPTOR(uppQDPolyProcInfo,StdPolyPatch);
- static RoutineDescriptor gStdRectRD = BUILD_ROUTINE_DESCRIPTOR(uppQDRectProcInfo,StdRectPatch);
- static RoutineDescriptor gStdRgnRD = BUILD_ROUTINE_DESCRIPTOR(uppQDRgnProcInfo,StdRgnPatch);
- static RoutineDescriptor gStdRRectRD = BUILD_ROUTINE_DESCRIPTOR(uppQDRRectProcInfo,StdRRectPatch);
- static RoutineDescriptor gStdTextRD = BUILD_ROUTINE_DESCRIPTOR(uppQDTextProcInfo,StdTextPatch);
- static UInt32 gPortCount = 0;
- static PortShadePtr **gPortList = NULL;
- static RgnHandle gScratchRgn = NULL;
- static RgnHandle gDirtyRgn = NULL;
- static Rect *gExtraRect = NULL;
-
-
- extern GWorldPtr gScreenBuffer = NULL;
- extern GWorldPtr dropShadowWorld = NULL;
- extern GWorldPtr preShiftWorld = NULL;
- extern GWorldPtr scratchWorld = NULL;
- extern GWorldPtr postShiftWorld = NULL;
-
- GWorldPtr gStageBuffer = NULL;
-
-
-
- OSStatus InitializePorts(void)
- {
- OSStatus err;
-
-
- gPortList = (PortShadePtr**)NewHandle(0);
- dAssert(gPortList != NULL);
- if (gPortList == NULL)
- return memFullErr;
-
- gScreenBuffer = CreateGWorld(&(GetMainDevice())[0]->gdRect);
- dAssert(gScreenBuffer != NULL);
- if (gScreenBuffer == NULL)
- return memFullErr;
-
- gStageBuffer = CreateGWorld(&(GetMainDevice())[0]->gdRect);
- dAssert(gStageBuffer != NULL);
- if (gStageBuffer == NULL)
- return memFullErr;
-
- dropShadowWorld = CreateGWorld(&(GetMainDevice())[0]->gdRect);
- dAssert(dropShadowWorld != NULL);
- if (dropShadowWorld == NULL)
- return memFullErr;
-
- preShiftWorld = CreateGWorld(&(GetMainDevice())[0]->gdRect);
- dAssert(preShiftWorld != NULL);
- if (preShiftWorld == NULL)
- return memFullErr;
-
- scratchWorld = CreateGWorld(&(GetMainDevice())[0]->gdRect);
- dAssert(scratchWorld != NULL);
- if (scratchWorld == NULL)
- return memFullErr;
-
- postShiftWorld = CreateGWorld(&(GetMainDevice())[0]->gdRect);
- dAssert(postShiftWorld != NULL);
- if (postShiftWorld == NULL)
- return memFullErr;
-
- gDirtyRgn = NewRgn();
- gScratchRgn = NewRgn();
- dAssert((gDirtyRgn != NULL) || (gScratchRgn != NULL));
- if ((gDirtyRgn == NULL) || (gScratchRgn == NULL))
- return memFullErr;
-
- SetEmptyRgn(gDirtyRgn);
- RescanPorts();
-
- #if APPBUILD
- PaintBehind((WindowPtr)-1,NULL);
- DrawMenuBar();
- #endif
-
- gOkToBlit = true;
-
- #if APPBUILD
- PaintBehind((WindowPtr)-1,NULL);
- DrawMenuBar();
- #endif
- return noErr;
- }
-
-
-
-
-
- void FinalizePorts(void)
- {
- UInt32 index;
-
-
- if (gDirtyRgn != NULL)
- DisposeRgn(gDirtyRgn);
-
- if (gScratchRgn != NULL)
- DisposeRgn(gScratchRgn);
-
- /*
- if (gScreenBuffer != NULL)
- DisposeGWorld(gScreenBuffer);
-
- if (gStageBuffer != NULL)
- DisposeGWorld(gStageBuffer);
-
- if (dropShadowWorld != NULL)
- DisposeGWorld(dropShadowWorld);
-
- if (preShiftWorld != NULL)
- DisposeGWorld(preShiftWorld);
-
- if (scratchWorld != NULL)
- DisposeGWorld(scratchWorld);
-
- if (postShiftWorld != NULL)
- DisposeGWorld(postShiftWorld);
- */
-
- if (gPortList != NULL)
- {
- while(gPortCount > 0)
- UnregisterPort((*gPortList)[0]->port,false);
-
- DisposeHandle((Handle)gPortList);
- }
-
- #if APPBUILD
- PaintBehind((WindowPtr)-1,NULL);
- DrawMenuBar();
- #endif
- }
-
-
-
-
-
- void AddDirtyRect(GrafPtr port,Rect *dirtyRect)
- {
- if ((port != *(GrafPtr*)0x9DE) && (port != *(GrafPtr*)0xD2C))
- {
- LocalToGlobal((Point*)&dirtyRect->top);
- LocalToGlobal((Point*)&dirtyRect->bottom);
- }
-
- dirtyRect->right += 3;
- dirtyRect->bottom += 3;
-
- RectRgn(gScratchRgn,dirtyRect);
- UnionRgn(gDirtyRgn,gScratchRgn,gDirtyRgn);
- }
-
-
-
-
-
- void FlushScreenBuffer(void)
- {
- QDBitsUPP oldBitsProc;
- CGrafPtr wMgrPort;
- GrafPtr oldPort;
- RGBColor oldBackColor,oldForeColor;
- Rect dirtyRect;
- PortShade *shade;
-
- GetCWMgrPort(&wMgrPort);
- shade = FindPortShadow((GrafPtr)wMgrPort);
- dAssert(shade != NULL);
- if (shade == NULL)
- return;
-
- // Ugly stuff.
- {
- static UInt32 lastFullBlit = 0;
- UInt32 curTicks = TickCount();
- if (curTicks - lastFullBlit > 60)
- {
- RectRgn(gDirtyRgn,&wMgrPort->portRect);
- lastFullBlit = curTicks;
- }
- }
-
- if (EmptyRgn(gDirtyRgn))
- return;
-
- oldBitsProc = wMgrPort->grafProcs->bitsProc;
- wMgrPort->grafProcs->bitsProc = shade->stdProcs.color.bitsProc;
-
- GetPort(&oldPort);
- SetPort((GrafPtr)wMgrPort);
- GetBackColor(&oldBackColor);
- GetForeColor(&oldForeColor);
- BackColor(whiteColor);
- ForeColor(blackColor);
-
- StRegion oldClip(wMgrPort->clipRgn);
- StRegion newClip(wMgrPort->portRect);
-
- SetClip(newClip);
-
- dirtyRect = gDirtyRgn[0]->rgnBBox;
- if (gOkToBlit)
- {
- RenderBufferOntoScreen(gScreenBuffer,(CGrafPtr)wMgrPort,&dirtyRect,gDirtyRgn);
- }
- else
- {
- CopyBits(&((GrafPtr)gScreenBuffer)->portBits,&((GrafPtr)wMgrPort)->portBits,&dirtyRect,
- &dirtyRect,srcCopy,(gDirtyRgn[0]->rgnSize == 10) ? NULL : gDirtyRgn);
- }
-
- SetClip(oldClip);
- RGBBackColor(&oldBackColor);
- RGBForeColor(&oldForeColor);
- SetPort(oldPort);
-
- wMgrPort->grafProcs->bitsProc = oldBitsProc;
- SetEmptyRgn(gDirtyRgn);
- }
-
-
-
-
-
- void MungeCopyBits(BitMap *srcMap,BitMap *dstMap,Rect *srcRect,Rect *dstRect,short mode,RgnHandle maskRgn,CopyBitsProcPtr copyBitsProc)
- {
- Ptr oldSrcBaseAddr,srcBaseAddr;
- UInt16 oldSrcRowBytes;
- Boolean srcScreenDevice = false;
-
-
- if ((*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- CallCopyBitsProc(copyBitsProc,srcMap,dstMap,srcRect,dstRect,mode,maskRgn);
- return;
- }
-
- // Change all WMgrPorts to CWMgrPorts.
- if (srcMap == &(*(GrafPtr*)0x9DE)->portBits)
- srcMap = &(*(GrafPtr*)0xD2C)->portBits;
-
- if (dstMap == &(*(GrafPtr*)0x9DE)->portBits)
- dstMap = &(*(GrafPtr*)0xD2C)->portBits;
-
- if ((srcMap->rowBytes & 0xC000) == 0xC000)
- {
- // srcMap is CGrafPtr + 2
- if (ScreenDeviceBaseAddr(((PixMapHandle)(srcMap->baseAddr))[0]->baseAddr))
- {
- srcScreenDevice = true;
- oldSrcBaseAddr = ((PixMapHandle)(srcMap->baseAddr))[0]->baseAddr;
- oldSrcRowBytes = ((PixMapHandle)(srcMap->baseAddr))[0]->rowBytes;
- srcBaseAddr = ((PixMapHandle)(srcMap->baseAddr))[0]->baseAddr = GetGrafPortBaseAddr((GrafPtr)gScreenBuffer);
- ((PixMapHandle)(srcMap->baseAddr))[0]->rowBytes = (GetGrafPortRowBytes((GrafPtr)gScreenBuffer) & ~0xC001) | (oldSrcRowBytes & 0xC001);
- }
- }
- else if ((srcMap->rowBytes & 0x8000) == 0x8000)
- {
- // srcMap is PixMap*
- if (ScreenDeviceBaseAddr(((PixMap*)srcMap)->baseAddr))
- {
- srcScreenDevice = true;
- oldSrcBaseAddr = ((PixMap*)srcMap)->baseAddr;
- oldSrcRowBytes = ((PixMap*)srcMap)->rowBytes;
- srcBaseAddr = ((PixMap*)srcMap)->baseAddr = GetGrafPortBaseAddr((GrafPtr)gScreenBuffer);
- ((PixMap*)srcMap)->rowBytes = (GetGrafPortRowBytes((GrafPtr)gScreenBuffer) & ~0xC001) | (oldSrcRowBytes & 0xC001);
- }
- }
- else
- {
- // srcMap is GrafPtr + 2
- if (ScreenDeviceBaseAddr(srcMap->baseAddr))
- {
- srcScreenDevice = true;
- oldSrcBaseAddr = srcMap->baseAddr;
- oldSrcRowBytes = srcMap->rowBytes;
- srcBaseAddr = srcMap->baseAddr = GetGrafPortBaseAddr((GrafPtr)gScreenBuffer);
- srcMap->rowBytes = (GetGrafPortRowBytes((GrafPtr)gScreenBuffer) & ~0xC001) | (oldSrcRowBytes & 0xC001);
- }
- }
-
- if (srcScreenDevice && (srcMap == dstMap))
- {
- GrafPtr port;
- Rect dirtyRect;
-
- GetPort(&port);
- dirtyRect = *srcRect;
- AddDirtyRect(port,&dirtyRect);
- }
-
- CallCopyBitsProc(copyBitsProc,srcMap,dstMap,srcRect,dstRect,mode,maskRgn);
-
- if (srcScreenDevice)
- {
- if ((srcMap->rowBytes & 0xC000) == 0xC000)
- {
- ((PixMapHandle)(srcMap->baseAddr))[0]->baseAddr = oldSrcBaseAddr;
- ((PixMapHandle)(srcMap->baseAddr))[0]->rowBytes = oldSrcRowBytes;
- }
- else if ((srcMap->rowBytes & 0x8000) == 0x8000)
- {
- ((PixMap*)srcMap)->baseAddr = oldSrcBaseAddr;
- ((PixMap*)srcMap)->rowBytes = oldSrcRowBytes;
- }
- else
- {
- srcMap->baseAddr = oldSrcBaseAddr;
- srcMap->rowBytes = oldSrcRowBytes;
- }
- }
- }
-
-
-
-
-
- void RegisterPort(GrafPtr port)
- {
- PortShade *shade;
- UInt32 size;
- OSStatus err;
-
-
- dAssert(port != NULL);
- if (port == NULL)
- return;
-
- // Ignore offscreen ports.
- if (!ScreenDevicePort(port))
- return;
-
- // Setup our shadow for this port.
- size = sizeof(PortShadePtr) * gPortCount;
- SetHandleSize((Handle)gPortList,size + sizeof(PortShadePtr));
- err = MemError();
- dAssert(err == noErr);
- if (err != noErr)
- return;
-
- shade = CreatePortShadow(port);
- dAssert(shade != NULL);
- if ((shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- SetHandleSize((Handle)gPortList,size);
- return;
- }
-
- shade->color = ColorGrafPort(port);
- if (shade->color)
- {
- SetStdCProcs(&shade->stdProcs.color);
- shade->procs.color = shade->stdProcs.color;
- ((CGrafPtr)port)->grafProcs = &shade->procs.color;
-
- ((CGrafPtr)port)->grafProcs->arcProc = &gStdArcRD;
- ((CGrafPtr)port)->grafProcs->bitsProc = &gStdBitsRD;
- ((CGrafPtr)port)->grafProcs->lineProc = &gStdLineRD;
- ((CGrafPtr)port)->grafProcs->ovalProc = &gStdOvalRD;
- ((CGrafPtr)port)->grafProcs->newProc1 = &gStdPixRD;
- ((CGrafPtr)port)->grafProcs->polyProc = &gStdPolyRD;
- ((CGrafPtr)port)->grafProcs->rectProc = &gStdRectRD;
- ((CGrafPtr)port)->grafProcs->rgnProc = &gStdRgnRD;
- ((CGrafPtr)port)->grafProcs->rRectProc = &gStdRRectRD;
- ((CGrafPtr)port)->grafProcs->textProc = &gStdTextRD;
- }
- else
- {
- SetStdProcs(&shade->stdProcs.bw);
- shade->procs.bw = shade->stdProcs.bw;
- port->grafProcs = &shade->procs.bw;
- }
-
- (*gPortList)[gPortCount] = shade;
- gPortCount += 1;
- }
-
-
-
-
-
- void RescanPorts(void)
- {
- QDPortListHandle qdports;
- PortShade *shade;
- UInt32 index;
- Boolean rescan;
-
-
- qdports = LMGetPortList();
- dAssert(qdports != NULL);
- if (qdports == NULL)
- return;
-
- for (index = 0;index < qdports[0]->count;index += 1) {
- shade = FindPortShadow(qdports[0]->port[index]);
- if (shade == NULL)
- RegisterPort(qdports[0]->port[index]);
- }
-
- do
- {
- rescan = false;
- for (index = 0;index < gPortCount;index += 1)
- if (FindInQDPortList((*gPortList)[index]) == NULL) {
- dprintf(kDConPrefix "Manually unregistering port: $%08lX\n",(*gPortList)[index]);
- UnregisterPort((*gPortList)[index]->port,true);
- rescan = true;
- break;
- }
- }while(rescan);
- }
-
-
-
-
-
- void UnregisterPort(GrafPtr port,Boolean afterTheFact)
- {
- PortShade *shade;
- UInt32 index;
-
-
- dAssert(port != NULL);
- if (port == NULL)
- return;
-
- // Lookup the port in our list and remove its entry if we find it. We might not find
- // it since we only track GrafPorts that point to a screen device.
- for (index = 0;index < gPortCount;index += 1)
- if ((*gPortList)[index]->port == port)
- {
- gPortCount -= 1;
- shade = (*gPortList)[index];
-
- if (shade->color)
- {
- ((CGrafPtr)port)->grafProcs = NULL;
- }
- else
- {
- port->grafProcs = NULL;
- }
-
- BlockMoveData(&(*gPortList)[index + 1],&(*gPortList)[index],(gPortCount - index) * sizeof(PortShadePtr));
- SetHandleSize((Handle)gPortList,gPortCount * sizeof(PortShadePtr));
- DisposePortShadow(shade);
- return;
- }
- }
-
-
- #if 0
- #pragma mark -
- #endif
-
-
- Boolean ColorGrafPort(GrafPtr port)
- {
- dAssert(port != NULL);
- if (port == NULL)
- return NULL;
-
- return ((port->portBits.rowBytes & 0xC000) != 0);
- }
-
-
-
-
-
- PortShade *CreatePortShadow(GrafPtr port)
- {
- PortShade *shade;
-
-
- dAssert(port != NULL);
- if (port == NULL)
- return NULL;
-
- shade = (PortShade*)NewPtrClear(sizeof(PortShade));
- dAssert(shade != NULL);
- if (shade == NULL)
- return NULL;
-
- shade->port = port;
- return shade;
- }
-
-
-
-
-
- void DisposePortShadow(PortShade *shade)
- {
- dAssert(shade != NULL);
- if (shade == NULL)
- return;
-
- DisposePtr((Ptr)shade);
- }
-
-
-
-
-
- GrafPtr FindInQDPortList(PortShade *shade)
- {
- QDPortListHandle qdports;
- UInt32 index;
-
-
- dAssert(shade != NULL);
- if (shade == NULL)
- return NULL;
-
- qdports = LMGetPortList();
- dAssert(qdports != NULL);
- if (qdports == NULL)
- return NULL;
-
- for (index = 0;index < qdports[0]->count;index += 1)
- if (qdports[0]->port[index] == shade->port)
- return qdports[0]->port[index];
-
- return NULL;
- }
-
-
-
-
-
- PortShade *FindPortShadow(GrafPtr port)
- {
- for (UInt32 index = 0;index < gPortCount;index += 1)
- if ((*gPortList)[index]->port == port)
- return (*gPortList)[index];
-
- return NULL;
- }
-
-
-
-
-
- Ptr GetGrafPortBaseAddr(GrafPtr port)
- {
- dAssert(port != NULL);
- if (port == NULL)
- return NULL;
-
- if (ColorGrafPort(port))
- {
- return GetPixBaseAddr(((CGrafPtr)port)->portPixMap);
- }
- else
- {
- return port->portBits.baseAddr;
- }
- }
-
-
-
-
-
- UInt16 GetGrafPortRowBytes(GrafPtr port)
- {
- dAssert(port != NULL);
- if (port == NULL)
- return NULL;
-
- if (ColorGrafPort(port))
- {
- return ((CGrafPtr)port)->portPixMap[0]->rowBytes;
- }
- else
- {
- return port->portBits.rowBytes;
- }
- }
-
-
-
-
-
- QDPortListHandle LMGetPortList(void)
- {
- return *(QDPortList***)0xD66;
- }
-
-
-
-
-
- Boolean ScreenDeviceBaseAddr(Ptr baseAddr)
- {
- for (GDHandle gdh = GetDeviceList();gdh != NULL;gdh = GetNextDevice(gdh))
- if ((UInt32)baseAddr == (UInt32)GetPixBaseAddr(gdh[0]->gdPMap))
- return true;
-
- return false;
- }
-
-
-
-
-
- Boolean ScreenDevicePort(GrafPtr port)
- {
- dAssert(port != NULL);
- if (port == NULL)
- return false;
-
- return ScreenDeviceBaseAddr(GetGrafPortBaseAddr(port));
- }
-
-
-
-
-
- void SetGrafPortBaseAddr(GrafPtr port,Ptr baseAddr)
- {
- dAssert((port != NULL) && (baseAddr != NULL));
- if ((port == NULL) || (baseAddr == NULL))
- return;
-
- if (ColorGrafPort(port))
- {
- ((CGrafPtr)port)->portPixMap[0]->baseAddr = baseAddr;
- }
- else
- {
- port->portBits.baseAddr = baseAddr;
- }
- }
-
-
-
-
-
- void SetGrafPortRowBytes(GrafPtr port,UInt16 rowBytes)
- {
- dAssert(port != NULL);
- if (port == NULL)
- return;
-
- if (ColorGrafPort(port))
- {
- ((CGrafPtr)port)->portPixMap[0]->rowBytes = rowBytes;
- }
- else
- {
- port->portBits.rowBytes = rowBytes;
- }
- }
-
-
- #if 0
- #pragma mark -
- #endif
-
-
- pascal void StdArcPatch(GrafVerb verb,Rect *rect,short startAngle,short arcAngle)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdArc(verb,rect,startAngle,arcAngle);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect = *rect;
- dirtyRect.right += 1;
- dirtyRect.bottom += 1;
- InsetRect(&dirtyRect,-port->pnSize.h,-port->pnSize.v);
- AddDirtyRect(port,&dirtyRect);
- CallQDArcProc(shade->stdProcs.color.arcProc,verb,rect,startAngle,arcAngle);
- }
-
- //FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdBitsPatch(BitMap *srcMap,Rect *srcRect,Rect *dstRect,short mode,RgnHandle maskRgn)
- {
- PortShade *shade;
- GrafPtr dstPort;
- Rect dirtyRect;
- Ptr srcBaseAddr;
-
-
- GetPort(&dstPort);
-
- shade = FindPortShadow(dstPort);
- if (!ScreenDevicePort(dstPort) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdBits(srcMap,srcRect,dstRect,mode,maskRgn);
- return;
- }
-
- {
- StScreenBuffer buffer(dstPort,gScreenBuffer);
-
- dirtyRect = *dstRect;
- AddDirtyRect(dstPort,&dirtyRect);
-
- CallQDBitsProc(shade->stdProcs.color.bitsProc,srcMap,srcRect,dstRect,mode,maskRgn);
- }
-
- //if (Button())
- // FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdLinePatch(Point endPoint)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdLine(endPoint);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect.top = port->pnLoc.v;
- dirtyRect.left = port->pnLoc.h;
- dirtyRect.bottom = endPoint.v;
- dirtyRect.right = endPoint.h;
- InsetRect(&dirtyRect,-(port->pnSize.h + 2),-(port->pnSize.v + 2));
- AddDirtyRect(port,&dirtyRect);
-
- CallQDLineProc(shade->stdProcs.color.lineProc,endPoint);
- }
-
- //FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdOvalPatch(GrafVerb verb,Rect *rect)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdOval(verb,rect);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect = *rect;
- dirtyRect.right += 1;
- dirtyRect.bottom += 1;
- InsetRect(&dirtyRect,-port->pnSize.h,-port->pnSize.v);
- AddDirtyRect(port,&dirtyRect);
-
- CallQDOvalProc(shade->stdProcs.color.ovalProc,verb,rect);
- }
-
- //FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdPixPatch(PixMap *src,Rect *srcRect,MatrixRecord *matrix,short mode,RgnHandle mask,PixMap *matte,Rect *matteRect,short flags)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdPix(src,srcRect,matrix,mode,mask,matte,matteRect,flags);
- return;
- }
-
- dprintf(kDConPrefix "StdPix $%08lX\n",port);
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect = *srcRect;
- TransformRect(matrix,&dirtyRect,NULL);
- AddDirtyRect(port,&dirtyRect);
-
- CallStdPixProc(shade->stdProcs.color.newProc1,src,srcRect,matrix,mode,mask,matte,matteRect,flags);
- }
-
- if (Button())
- FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdPolyPatch(GrafVerb verb,PolyHandle poly)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdPoly(verb,poly);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect = poly[0]->polyBBox;
- dirtyRect.right += 1;
- dirtyRect.bottom += 1;
- InsetRect(&dirtyRect,-port->pnSize.h,-port->pnSize.v);
-
- AddDirtyRect(port,&dirtyRect);
- CallQDPolyProc(shade->stdProcs.color.polyProc,verb,poly);
- }
-
- //FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdRectPatch(GrafVerb verb,Rect *rect)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdRect(verb,rect);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect = *rect;
- dirtyRect.right += 1;
- dirtyRect.bottom += 1;
- InsetRect(&dirtyRect,-port->pnSize.h,-port->pnSize.v);
- AddDirtyRect(port,&dirtyRect);
- CallQDRectProc(shade->stdProcs.color.rectProc,verb,rect);
- }
-
- //FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdRgnPatch(GrafVerb verb,RgnHandle rgn)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdRgn(verb,rgn);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect = rgn[0]->rgnBBox;
- dirtyRect.right += 1;
- dirtyRect.bottom += 1;
- InsetRect(&dirtyRect,-port->pnSize.h,-port->pnSize.v);
- AddDirtyRect(port,&dirtyRect);
- CallQDRgnProc(shade->stdProcs.color.rgnProc,verb,rgn);
- }
-
- //FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdRRectPatch(GrafVerb verb,Rect *rect,short width,short height)
- {
- PortShade *shade;
- GrafPtr port;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdRRect(verb,rect,width,height);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- dirtyRect = *rect;
- dirtyRect.right += 1;
- dirtyRect.bottom += 1;
- InsetRect(&dirtyRect,-port->pnSize.h,-port->pnSize.v);
- AddDirtyRect(port,&dirtyRect);
- CallQDRRectProc(shade->stdProcs.color.rRectProc,verb,rect,width,height);
- }
-
- //FlushScreenBuffer();
- }
-
-
-
-
-
- pascal void StdTextPatch(short count,Ptr text,Point numer,Point denom)
- {
- PortShade *shade;
- GrafPtr port;
- FontInfo finfo;
- Rect dirtyRect;
-
-
- GetPort(&port);
- shade = FindPortShadow(port);
- if (!ScreenDevicePort(port) || (shade == NULL) || (*(UInt32*)0xD2C == NULL) || (*(UInt32*)0xD2C == 0xFFFFFFFF)) {
- StdText(count,text,numer,denom);
- return;
- }
-
- {
- StScreenBuffer buffer(port,gScreenBuffer);
-
- GetFontInfo(&finfo);
- dirtyRect.top = port->pnLoc.v - finfo.ascent;
- dirtyRect.left = port->pnLoc.h - 1;
- dirtyRect.bottom = port->pnLoc.v + finfo.descent;
- dirtyRect.right = port->pnLoc.h + TextWidth(text,0,count) + finfo.widMax;
-
- AddDirtyRect(port,&dirtyRect);
- CallQDTextProc(shade->stdProcs.color.textProc,count,text,numer,denom);
- }
-
- //FlushScreenBuffer();
- }
-